#include "Chess.h"

	// #include <stdio.h>
	// #include <stdlib.h>
	// #include <sys/types.h>
	// #include <sys/stat.h>
	// #include <fcntl.h>
	// #include <linux/input.h>
	// #include <unistd.h>
//int	option = get_motion(touch_fd, &pos_x, &pos_y);

//调用一次获取一次滑屏动作
void get_motion(int touch_fd, int* pos_x, int* pos_y)
{
	int tmep_x = -1, tmep_y = -1;
	int diff_x = -1, diff_y = -1;

	//定义结构体变量
	struct input_event info;

	//定义起始坐标结构体变量
	struct touch start, end;

	//循环读取触摸数据,期望获取最后松开的坐标数据
	while (1)
	{
		//读取数据
		read(touch_fd, &info, sizeof(info));

		//判断是否为x轴,如果是则保存该坐标值
		if (info.type == EV_ABS && info.code == ABS_X)
		{
			//如果屏幕边框为蓝色,则使用以下代码:
			//*pos_x = info.value;

			//如果屏幕边框为黑色,则使用以下代码:
			tmep_x = info.value * 800 / 1024;
		}
		//判断是否为y轴,如果是则保存该坐标值
		if (info.type == EV_ABS && info.code == ABS_Y)
		{
			//如果屏幕边框为蓝色,则使用以下代码:
			//*pos_y = info.value;

			//如果屏幕边框为黑色,则使用以下代码:
			tmep_y = info.value * 480 / 600;
		}

		//判断是否松开了.松开则不再获取(更新)坐标数据,此时获取的就是结束坐标(最后一个坐标数据)
		if (info.type == EV_KEY && info.code == BTN_TOUCH && info.value == 1)
		{
			//保存起始坐标
			start.x = tmep_x;
			start.y = tmep_y;
		}
		else if (info.type == EV_KEY && info.code == BTN_TOUCH && info.value == 0)
		{
			//保存结束坐标
			end.x = tmep_x;
			end.y = tmep_y;

			break;
		}
	}

	//计算差值
	diff_x = end.x - start.x;
	diff_y = end.y - start.y;

	//判断是否为滑动
	if ((diff_x * diff_x + diff_y * diff_y) > 30 * 30)
	{
		//判断是否向上滑动:1
		if (abs(diff_y) > abs(diff_x) && diff_y < 0)
		{
			return 1;//up
		}
		//判断是否向下滑动:2
		if (diff_y > abs(diff_x) && diff_y > 0)
		{
			return 2;//down
		}

		//判断是否向左滑动:3
		if (abs(diff_x) > abs(diff_y) && diff_x < 0)
		{
			return 3;//left
		}

		//判断是否向右滑动:4
		if (diff_x > abs(diff_y) && diff_x > 0)
		{
			return 4;//right
		}
	}
	else	//没有滑动
	{
		*pos_x = end.x;
		*pos_y = end.y;

		return 0;
	}
}

//获取一次结束坐标数据
void get_end_touch(int touch_fd, int* pos_x, int* pos_y)
{
	//定义结构体变量
	struct input_event info;

	//循环读取触摸数据,期望获取最后松开的坐标数据
	while (1)
	{
		//读取数据
		read(touch_fd, &info, sizeof(info));	

		//判断是否为x轴,如果是则保存该坐标值
		if (info.type == EV_ABS && info.code == ABS_X)
		{
			//如果屏幕边框为蓝色,则使用以下代码:
			//*pos_x = info.value;

			//如果屏幕边框为黑色,则使用以下代码:
			*pos_x = info.value * 800 / 1024;
		}

		//判断是否为y轴,如果是则保存该坐标值
		if (info.type == EV_ABS && info.code == ABS_Y)
		{
			//如果屏幕边框为蓝色,则使用以下代码:
			//*pos_y = info.value;

			//如果屏幕边框为黑色,则使用以下代码:
			*pos_y = info.value * 480 / 600;
		}
		//判断是否松开了.松开则不再获取(更新)坐标数据,此时获取的就是结束坐标(最后一个坐标数据)
		if (info.type == EV_KEY && info.code == BTN_TOUCH && info.value == 0)
		{
			break;
		}
	}

	return 0;
}
